package org.application.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.application.Entity.Piece;
import org.application.service.MoveValidator;

import java.util.Map;

@Slf4j
public class PawnMoveValidator implements MoveValidator {
    public boolean validateMove(Map<String, Piece> pieceMap, Piece selectedPiece, int startRow, int startCol, int targetRow, int targetCol) {
        // 兵的规则：在没有过那条4 的线的时候只能往前走，在过了4之后的线后可以左右前走，但是不能往后走了
        // 假设"过那条4的线"是指到达第4行（以1为起点）
        int line = 5;

        // 打印日志：开始验证移动
        log.info("验证移动: 选择的棋子: {}, 起始位置: ({}, {}), 目标位置: ({}, {})",
                selectedPiece.getName(), startRow, startCol, targetRow, targetCol);

        // 兵过线前的移动规则
        if (startRow < line) {
            log.info("棋子未过楚河汉界，检查是否能向前走一格...");
            // 在过线之前，兵只能往前走一格
            if (targetCol == startCol && (targetRow - startRow) == 1) {
                log.info("合法移动：兵向前走一格");
                return true; // 兵向前走一格
            }
            log.warn("非法移动：兵在未过4行时无法横向或后退");
            return false; // 如果不符合规则，返回false
        }

        // 兵过线后的移动规则
        if (startRow >= line) {
            log.info("棋子已过楚河汉界，检查是否能向前或左右移动...");
            // 过线后，兵可以向前走一格
            if (targetCol == startCol && targetRow - startRow == 1) {
                log.info("合法移动：兵向前走一格");
                return true; // 兵向前走一格
            }

            // 过线后，兵可以向左走一格
            if (targetRow == startRow && targetCol == startCol - 1) {
                log.info("合法移动：兵向左走一格");
                return true; // 兵向左走一格
            }

            // 过线后，兵可以向右走一格
            if (targetRow == startRow && targetCol == startCol + 1) {
                log.info("合法移动：兵向右走一格");
                return true; // 兵向右走一格
            }

            log.warn("非法移动：兵不能向后走或超出范围");
        }

        // 如果不符合任何有效的移动规则，返回false
        log.warn("非法移动：不符合任何合法规则");
        return false;
    }
}
